import cv2

image=cv2.imread(r'C:\Users\ASUS\Desktop\4.JPG') #读取图片
img=cv2.cvtColor(image,cv2.COLOR_BGR2GRAY) #转成灰度图

x=cv2.Sobel(img,cv2.CV_16S,1,0) #16位上分别对xy取一阶导，因为sobel函数求导之后会有负数，原8位无符号位数不够，故要扩展成16位
y=cv2.Sobel(img,cv2.CV_16S,0,1)
absx=cv2.convertScaleAbs(x) #转回8位
absy=cv2.convertScaleAbs(y)
sobel=cv2.addWeighted(absx,0.5,absy,0.5,0) #两个方向计算，最后根据权重结合起来

canny=cv2.Canny(img,50,150)

cv2.imshow('sobel',sobel)
cv2.imshow('canny',canny)

cv2.waitKey()
cv2.destroyAllWindows()
